/** /////////////////////////////////////////////////////////////////////////////////
 * @author	Jaeger, Mathias
 * @class 	skybox.js dient der Erstellung einer Skybox aus 6 Einzelbildern.
 * 			Zum Austauschen der Bilder pfad und format anpassen, und bei der Datei-
 * 			bennenung auf posx bis negz verwenden.
 * 			Ausserdem: Material mit envMap benötigen diese cubeMap 
 * 				-> setupReflections() im Aufrufer
 *//////////////////////////////////////////////////////////////////////////////////
skybox = function() {

	var skybox = this;

	// Referenz auf Ordner der Cubemap Bilder
	var pfad = "assets/textures/cubemap/UnionSquare/";
	// Dateiformat
	var format = '.jpg';

	// Skybox erzeugen
	this.cubeMap = erstelleCubeMap();
	
	// Cube-Shader-Setup
	var shader = THREE.ShaderLib["cube"];
	shader.uniforms["tCube"].value = cubeMap;
	var material = new THREE.ShaderMaterial({
		fragmentShader : shader.fragmentShader,
		vertexShader : shader.vertexShader,
		uniforms : shader.uniforms,
		depthWrite : false,
		side : THREE.BackSide
	});

	var box = erstelleBox();

	return box;

	/* Funktion zum Erstellen einer Cubemap durch Projektino von 6 Bildern auf einen Wuerfel.*/
	function erstelleCubeMap() {
		// Array mit Referenzen auf alle Bilder zum uebergeben an THREE.ImageUtils.loadTextureCube()
		var urls = [pfad + 'posx' + format, pfad + 'negx' + format, pfad + 'posy' + format, pfad + 'negy' + format, pfad + 'posz' + format, pfad + 'negz' + format];
		// Three.js-Hilfsmittel zum Erzeugen der cubeMap aus dem Dateipfaden-Array
		cubeMap = THREE.ImageUtils.loadTextureCube(urls, new THREE.CubeReflectionMapping());
		// cubeMap an Aufrufer zurueckgeben
		return cubeMap;
	};

	function erstelleBox() {
		box = new THREE.Mesh(new THREE.CubeGeometry(10000, 10000, 10000), material);

		return box;
	};

};
